package com.techsoft.utils;

public class StringUtil {
	/**
	 * 字符串首字母小写
	 * 
	 * @param 字符串
	 * @return 字符串
	 */
	public static String toLowerCaseFirstChar(String str) {
		if (str == null || "".equals(str))
			return str;
		if (Character.isLowerCase(str.charAt(0)))
			return str;
		else
			return (new StringBuilder()).append(Character.toLowerCase(str.charAt(0))).append(str.substring(1))
					.toString();
	}

	/**
	 * 字符串首字母大写
	 * 
	 * @param 字符串
	 * 
	 * @return 字符串
	 */
	public static String toUpperCaseFirstChar(String str) {
		if (str == null || "".equals(str))
			return str;
		if (Character.isUpperCase(str.charAt(0)))
			return str;
		else
			return (new StringBuilder()).append(Character.toUpperCase(str.charAt(0))).append(str.substring(1))
					.toString();
	}

	/**
	 * @param 待处理的字符串
	 * 
	 * @return 返回骆驼式命名法的字符器
	 * 
	 *         第一个单词小写，其他单词第一个字母大写
	 * 
	 *         字段名称以一到多个单词， 单词之间用下划线区分
	 */
	public static String camelCase(String value) {
		String[] words = value.split("_");
		StringBuilder result = new StringBuilder();
		String word = null;
		String firstChar = null;
		String otherChars = null;
		for (int i = 0; i < words.length; i++) {
			word = words[i];
			if (i == 0) {
				result.append(word.toLowerCase());
			} else {
				firstChar = word.substring(0, 1);
				otherChars = word.substring(1, word.length());
				result.append(firstChar.toUpperCase()).append(otherChars.toLowerCase());
			}
		}

		return result.toString();
	}

	/**
	 * 将驼峰式命名的字符串转换为下划线大写方式。如果转换前的驼峰式命名的字符串为空，则返回空字符串。
	 * 
	 * 例如：HelloWorld->HELLO_WORLD
	 * 
	 * @param name
	 *            转换前的驼峰式命名的字符串
	 * 
	 * @return 转换后下划线大写方式命名的字符串
	 */
	public static String underScoreName(String name) {
		StringBuilder result = new StringBuilder();
		if (name != null && name.length() > 0) {
			// 将第一个字符处理成大写
			result.append(name.substring(0, 1).toUpperCase());
			// 循环处理其余字符
			for (int i = 1; i < name.length(); i++) {
				String s = name.substring(i, i + 1);
				// 在大写字母前添加下划线
				if (s.equals(s.toUpperCase()) && !Character.isDigit(s.charAt(0))) {
					result.append("_");
				}
				// 其他字符直接转成大写
				result.append(s.toUpperCase());
			}
		}
		return result.toString();
	}

	public static boolean isBlank(String value) {
		return ((value == null) || (value.equals("")));
	}
}
